home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 2 / Tech Arsenal 2 (Arsenal Computer).iso / clipper / s93bsp.exe / CL5 / INV00.PRG < prev    next >
Encoding:
Text File  |  1993-11-26  |  17.2 KB  |  655 lines

  1. ///////////////////////////////////////////////////////////////
  2. //
  3. //  Module : INV00.PRG
  4. //
  5. //  Created by SUMMER'93 (c) on Fri Nov 26 14:49:41 1993
  6. //
  7. ///////////////////////////////////////////////////////////////
  8. #include "snj.ch"
  9. procedure INVMAIN
  10. // Calls: INVSAY INVCLEAR INVGET PARTSHOW INVTOT QBPROMPT INVEDIT INVFIND INVDEL INVOUT 
  11. // Called By: BODYWORK 
  12. //       I N V 0 0
  13. //       Main controlling routine for Invoices
  14. local INVCOM, PINVNO
  15.  
  16. PINVNO := INVCOM := 0 
  17.  
  18. select 0 
  19. use INVOICE index INVNUM alias INVOICE 
  20. select 0 
  21. use PARTS index PARTINV 
  22. select 0 
  23. use PARTLINE 
  24. set deleted on 
  25. QBCHOICE( 1  )
  26. do INVSAY with .f. 
  27.  
  28. do while .t. 
  29.  
  30.     INVCLEAR( )
  31.     do INVGET with .f. 
  32.     select PARTLINE 
  33.     zap 
  34.     do PARTSHOW with 15, 1, 10 
  35.     select INVOICE 
  36.     do INVTOT
  37.     INVCOM := QBPROMPT( "Add|Edit|Delete|Print|Quit|", ;
  38.     "Add a new invoice, or Fetch existing" )
  39.  
  40.     PINVNO := MINVNO() 
  41.     do case 
  42.         case INVCOM  = 1  // Add
  43.             MEDITING( .f.  )
  44.             do INVEDIT with 0 
  45.         case INVCOM  = 2  // Edit
  46.             INVFIND( .t. )
  47.             if MINVNO() > 0 
  48.                 MEDITING( .t.  )
  49.                 PINVNO := MINVNO() 
  50.                 do INVEDIT with PINVNO 
  51.             endif 
  52.         case INVCOM  = 3  // Delete
  53.             INVFIND( .f. )
  54.             if MINVNO() > 0 
  55.                 PINVNO := MINVNO() 
  56.                 do INVDEL with PINVNO 
  57.             endif 
  58.         case INVCOM  = 4  // Print
  59.             INVFIND( .f. )
  60.             if MINVNO() > 0 
  61.                 PINVNO := MINVNO() 
  62.                 do INVOUT with PINVNO 
  63.             endif 
  64.         case INVCOM  = 5 .or. INVCOM  = 0 
  65.             exit 
  66.     endcase 
  67.     QBCHOICE( 4  )
  68. enddo 
  69. close database 
  70.  
  71. return 
  72.  
  73. //*****************************************************************
  74.  
  75. procedure INVEDIT( PINVNO ) // Amended by SUMMER93
  76. // Calls: INVADD SINVNO QBPROMPT INVSAVE INVFILL INVGET PARTSHOW INVTOT QBMESS INVOUT INVREN INVCLEAR INVSAY INVPAY INVINSLB INVVEH PARTEDIT 
  77. // Called By: INVMAIN 
  78. //   I N V E D I T
  79. local IACTION, EACTION, INVSTAT, DEFCOM
  80.  
  81.  
  82. select INVOICE 
  83. INVSTAT := 0 
  84. if PINVNO  = 0 
  85.     MINVNO( INVADD( 0 ) )
  86.     IACTION := 99 
  87.     EACTION := 1 
  88. else 
  89.     IACTION := 2 
  90.     EACTION := 0 
  91. endif 
  92. if MINVNO()  = 0 
  93.     return 
  94. endif 
  95. DEFCOM := 4 
  96. do while .t. 
  97.  
  98.     //   Get headers etc
  99.     SINVNO( )
  100.     if IACTION  = 0 
  101.         IACTION := QBPROMPT( "Save|Edit|Abandon|Print|Renumber|Quit|", ;
  102.         "Actions on this Invoice, Exit", DEFCOM )
  103.         DEFCOM := IACTION 
  104.     endif 
  105.  
  106.     do case 
  107.         case IACTION  = 1 
  108.             INVSTAT := INVSAVE( )
  109.             IACTION := EACTION := 0 
  110.             DEFCOM := 6 
  111.         case IACTION  = 2 
  112.             EACTION := QBPROMPT( ;
  113.             "Owner|Credit terms|Insurance/Labour|Vehicle/Dates|Parts/Paint etc|Quit|";
  114.             ,  "Select Invoice area to update", EACTION + 1 )
  115.             INVSTAT := 1 
  116.             DEFCOM := 1 
  117.         case IACTION  = 3 
  118.             INVSTAT := INVFILL( .t. )
  119.             do INVGET with .f. 
  120.             do PARTSHOW with 15, 1, 10 
  121.             do INVTOT
  122.             IACTION := EACTION := 0 
  123.             if MINVNO()  = 0 
  124.                 do QBMESS with "Invoice not present in Database - returning", ;
  125.                 COLFLASH() , 5 
  126.                 return 
  127.             endif 
  128.         case IACTION  = 4 
  129.             do INVOUT with (MINVNO() )
  130.             IACTION := EACTION := 0 
  131.         case IACTION  = 5 
  132.             do INVREN
  133.             IACTION := EACTION := 0 
  134.         case IACTION  = 6 .or. IACTION  = 0  // MIB 23/10/90
  135.             if INVSTAT  = 1 .and. MINVTOTAL() > 0 
  136.                 do QBMESS with "Invoice changed - Save or Abandon first", ;
  137.                 COLHEAD() , 5 
  138.                 IACTION := EACTION := 0 
  139.             else 
  140.                 do INVCLEAR
  141.                 do INVSAY with .f. 
  142.                 exit 
  143.             endif 
  144.     endcase 
  145.  
  146.     GETOUT( .f.  )
  147.     do case 
  148.         case EACTION  = 1  // Owner
  149.             do INVGET with .t. 
  150.             IACTION := 2  // Get back to the right menu in Add mode
  151.         case EACTION  = 2  // Payment
  152.             do INVPAY with .t. 
  153.         case EACTION  = 3  // Insurance/Labour
  154.             do INVINSLB with .t. 
  155.         case EACTION  = 4  // Vehicle
  156.             do INVVEH with .t. 
  157.         case EACTION  = 5  // Parts
  158.             do PARTEDIT with 15, 1, 10, PINVNO 
  159.             do PARTSHOW with 15, 1, 10 
  160.     endcase 
  161.     do INVTOT
  162.  
  163.     if GETOUT() .or. EACTION  = 6 .or. EACTION  = 0 
  164.         IACTION := EACTION := 0 
  165.     endif 
  166. enddo 
  167.  
  168. return 
  169.  
  170. //*****************************************************************
  171.  
  172. function INVFILL( DOPART ) // Amended by SUMMER93
  173. // Calls: PARTLOAD 
  174. // Called By: INVEDIT INVFIND REPREV REPWIP 
  175. // The following locals have been declared by Summer'93
  176. // PSTAT 
  177. local PSTAT
  178. //       I N V F I L L
  179.  
  180. MINVNO( INVOICE->INVNO  )
  181. MSPEEDO( INVOICE->SPEEDO  )
  182. MFUEL( INVOICE->FUEL  )
  183. MPARTDISC( INVOICE->PARTDISC  )
  184. MVATRATE( INVOICE->VATRATE  )
  185. MOWNNAME( INVOICE->OWNNAME  )
  186. MOWNINIT( INVOICE->OWNINIT  )
  187. MOWNADD1( INVOICE->OWNADD1  )
  188. MOWNADD2( INVOICE->OWNADD2  )
  189. MOWNADD3( INVOICE->OWNADD3  )
  190. MMAKEMODEL( INVOICE->MAKEMODEL  )
  191. MINSCO( INVOICE->INSCO  )
  192. MINSADD1( INVOICE->INSADD1  )
  193. MINSADD2( INVOICE->INSADD2  )
  194. MINSENG( INVOICE->INSENG  )
  195. MINSTEL( INVOICE->INSTEL  )
  196. MPAINT( INVOICE->PAINT  )
  197. MTRIM( INVOICE->trim  )
  198. MOWNTELH( INVOICE->OWNTELH  )
  199. MOWNTELB( INVOICE->OWNTELB  )
  200. MOWNVAT( INVOICE->OWNVAT  )
  201. MINSTOPAY( INVOICE->INSTOPAY  )
  202. MACTYPE( INVOICE->ACTYPE  )
  203. MWORKTYPE( INVOICE->WORKTYPE  )
  204. MDATEIN( INVOICE->DATEIN  )
  205. MDATEOUT( INVOICE->DATEOUT  )
  206. MDATEINV( INVOICE->DATEINV  )
  207. MREGNO( INVOICE->REGNO  )
  208. MYEAR( INVOICE->year  )
  209. MENGNO( INVOICE->ENGNO  )
  210. MCHASNO( INVOICE->CHASNO  )
  211. MESTNO( INVOICE->ESTNO  )
  212. MLABESTNO( INVOICE->LABESTNO  )
  213. MCLAIMNO( INVOICE->CLAIMNO  )
  214. MLABOUR1( INVOICE->LABOUR1  )
  215. MLABOUR2( INVOICE->LABOUR2  )
  216. MLABOUR3( INVOICE->LABOUR3  )
  217. MLABOUR4( INVOICE->LABOUR4  )
  218. MLABOURT( INVOICE->LABOURT  )
  219. MINSLAB( INVOICE->INSLAB  )
  220. MOWNLAB( INVOICE->OWNLAB  )
  221. MINSPART( INVOICE->INSPART  )
  222. MOWNPART( INVOICE->OWNPART  )
  223. MINSSPEC( INVOICE->INSSPEC  )
  224. MOWNSPEC( INVOICE->OWNSPEC  )
  225. MINSAMT( INVOICE->INSAMT  )
  226. MOWNAMT( INVOICE->OWNAMT  )
  227. MEXCESS( INVOICE->EXCESS  )
  228. MCONTRIB( INVOICE->CONTRIB  )
  229. MINSDUE( INVOICE->INSDUE  )
  230. MOWNDUE( INVOICE->OWNDUE  )
  231. MINVTOTAL( INVOICE->INVTOTAL  )
  232. MCUSTTYP( INVOICE->CUSTTYPE  )
  233. ML2TEXT( INVOICE->L2TEXT  )
  234. ML3TEXT( INVOICE->L3TEXT  )
  235. ML4TEXT( INVOICE->L4TEXT  )
  236.  
  237. if DOPART 
  238.     PSTAT := PARTLOAD( MINVNO() )
  239. endif 
  240. return iif( MINVNO()  = 0, 0, 2 )
  241.  
  242. //*****************************************************************
  243.  
  244. function INVCLEAR
  245. // Calls: 
  246. // Called By: INVMAIN INVEDIT INVADD INVDEL BODYINIT 
  247.  
  248. //       I N V C L E A R
  249. local OLDINVNO
  250.  
  251. OLDINVNO := MINVNO() 
  252.  
  253. MINVNO( 0  )
  254. MSPEEDO( 0  )
  255. MFUEL( 0  )
  256. MPARTDISC( 0  )
  257. MLABOUR1( 0.00  )
  258. MLABOUR2( 0.00  )
  259. MLABOUR3( 0.00  )
  260. MLABOUR4( 0.00  )
  261. MLABOURT( 0.00  )
  262. MINSLAB( 0.00  )
  263. MOWNLAB( 0.00  )
  264. MINSPART( 0.00  )
  265. MOWNPART( 0.00  )
  266. MINSSPEC( 0.00  )
  267. MOWNSPEC( 0.00  )
  268. MINSAMT( 0.00  )
  269. MOWNAMT( 0.00  )
  270. MEXCESS( 0.00  )
  271. MCONTRIB( 0.00  )
  272. MINSDUE( 0.00  )
  273. MOWNDUE( 0.00  )
  274. MINVTOTAL( 0.00  )
  275. IPDSCNT( 0.00  )
  276. OPDSCNT( 0.00  )
  277. ISUBTOT( 0.00  )
  278. OSUBTOT( 0.00  )
  279. IVATAMT( 0.00  )
  280. OVATAMT( 0.00  )
  281. INSSUB( 0.00  )
  282. OWNSUB( 0.00  )
  283. MVATRATE( QBVAT()  )
  284.  
  285. MOWNADD1( space(30 ) )
  286. MOWNADD2( space(30 ) )
  287. MOWNADD3( space(30 ) )
  288. MMAKEMODEL( space(30 ) )
  289. MINSCO( space(30 ) )
  290. MINSADD1( space(30 ) )
  291. MINSADD2( space(30 ) )
  292. MINSENG( space(30 ) )
  293. MINSTEL( space(30 ) )
  294. ML2TEXT( space(30 ) )
  295. ML3TEXT( space(30 ) )
  296. ML4TEXT( space(30 ) )
  297. MENGNO( space(30 ) )
  298. MCHASNO( space(30 ) )
  299. MOWNNAME( space(24 ) )
  300. MCLAIMNO( space(15 ) )
  301. MPAINT( space(12 ) )
  302. MTRIM( space(12 ) )
  303. MOWNTELH( space(12 ) )
  304. MOWNTELB( space(12 ) )
  305. MESTNO( space(12 ) )
  306. MLABESTNO( space(12 ) )
  307. MREGNO( space(8 ) )
  308. MYEAR( space(7 ) )
  309. MOWNINIT( space(6 ) )
  310. MCUSTTYP( space(4 ) )
  311. MACTYPE( space(1 ) )
  312. MWORKTYPE( space(1 ) )
  313.  
  314. MOWNVAT( .f.  )
  315. MINSTOPAY( .f.  )
  316.  
  317. MDATEIN( date() )
  318. MDATEOUT( ctod("" ) )
  319. MDATEINV( ctod("" ) )
  320.  
  321. return( OLDINVNO )
  322.  
  323. //*****************************************************************
  324.  
  325. function INVADD( NEWINV ) // Amended by SUMMER93
  326. // Calls: QBPROMPT INVNEW NEWNUM QBREAD INVCLEAR 
  327. // Called By: INVEDIT 
  328. //       get a new invoice number
  329. local INVACT, GETLIST
  330. // These locals cover set/get variables where lvalues are needed
  331. local MINVNO
  332. GETLIST := {}
  333.  
  334. GETOUT( .f.  )
  335.  
  336. select PARTLINE 
  337. zap 
  338. select INVOICE 
  339. INVACT := QBPROMPT( "Automatic|Manual|", ;
  340. "Choose Method of generating new Invoice - ESC to Quit", 1 )
  341. do case 
  342.     case INVACT  = 0 .or. GETOUT() 
  343.         return 0 
  344.     case INVACT  = 1 
  345.         //   Get new Invoice number
  346.         AUTOADD( .t.  )
  347.         do INVNEW with .f. 
  348.     case INVACT  = 2 
  349.         // GET command amended to ...
  350.         MINVNO := MINVNO()
  351.         @ 2, 73  get MINVNO picture "99999" ;
  352.          WHEN { || MINVNO := MINVNO(), .t. } ;
  353.          valid { || MINVNO( MINVNO ) != NIL .and. NEWNUM(.t. ) }
  354.         do QBREAD with "Input new Invoice number", ;
  355.         "It must not already exist" , @GETLIST
  356.         // Call amended
  357.         AUTOADD( .f.  )
  358.         if GETOUT() 
  359.             MINVNO( 0  )
  360.         endif 
  361. endcase 
  362.  
  363. MINVNO( INVCLEAR( ) )
  364. return( MINVNO() )
  365.  
  366. //*****************************************************************
  367.  
  368. function INVSAVE
  369. // Calls: INVNEW QBADBLNK PARTSAVE 
  370. // Called By: INVEDIT 
  371.  
  372. //       I N V S A V E
  373. local PINVNO, GO_REC
  374.  
  375. select INVOICE 
  376. use INVOICE 
  377. set softseek off 
  378. set index to INVNUM, INVDATE, INVCUST, INVNAME 
  379. seek str( MINVNO() , 5 )
  380. if eof( )
  381.     if AUTOADD() 
  382.         do INVNEW with .t. 
  383.     endif 
  384.     select INVOICE 
  385.     go top 
  386.     if INVOICE->INVNO <> 0 .or. reccount( ) = 0 
  387.         do QBADBLNK with 10 
  388.         go top 
  389.     endif 
  390.  
  391. endif 
  392.  
  393. replace INVOICE->INVNO with MINVNO() , INVOICE->SPEEDO with MSPEEDO() , ;
  394. INVOICE->FUEL with MFUEL() , INVOICE->PARTDISC with MPARTDISC() 
  395. replace INVOICE->VATRATE with MVATRATE() , INVOICE->OWNNAME with MOWNNAME() , ;
  396. INVOICE->OWNADD1 with MOWNADD1() , INVOICE->OWNADD2 with MOWNADD2() 
  397. replace INVOICE->OWNADD3 with MOWNADD3() , INVOICE->MAKEMODEL with ;
  398. MMAKEMODEL() , INVOICE->INSCO with MINSCO() , INVOICE->INSADD1 with ;
  399. MINSADD1() 
  400. replace INVOICE->INSADD2 with MINSADD2() , INVOICE->INSENG with MINSENG() , ;
  401. INVOICE->INSTEL with MINSTEL() , INVOICE->PAINT with MPAINT() 
  402. replace INVOICE->OWNTELH with MOWNTELH() , INVOICE->OWNTELB with MOWNTELB() , ;
  403. INVOICE->OWNVAT with MOWNVAT() , INVOICE->INSTOPAY with MINSTOPAY() 
  404. replace INVOICE->ACTYPE with MACTYPE() , INVOICE->WORKTYPE with MWORKTYPE() , ;
  405. INVOICE->trim with MTRIM() 
  406. replace INVOICE->DATEIN with MDATEIN() , INVOICE->DATEOUT with MDATEOUT() , ;
  407. INVOICE->DATEINV with MDATEINV() 
  408. replace INVOICE->REGNO with MREGNO() , INVOICE->year with MYEAR() , INVOICE->;
  409. ENGNO with MENGNO() 
  410. replace INVOICE->CHASNO with MCHASNO() , INVOICE->ESTNO with MESTNO() , ;
  411. INVOICE->LABESTNO with MLABESTNO() , INVOICE->CLAIMNO with MCLAIMNO() 
  412. replace INVOICE->LABOUR1 with MLABOUR1() , INVOICE->LABOUR2 with MLABOUR2() , ;
  413. INVOICE->LABOUR3 with MLABOUR3() , INVOICE->LABOUR4 with MLABOUR4() 
  414. replace INVOICE->LABOURT with MLABOURT() , INVOICE->INSLAB with MINSLAB() , ;
  415. INVOICE->OWNLAB with MOWNLAB() , INVOICE->INSPART with MINSPART() 
  416. replace INVOICE->OWNPART with MOWNPART() , INVOICE->INSSPEC with MINSSPEC() , ;
  417. INVOICE->OWNSPEC with MOWNSPEC() , INVOICE->INSAMT with MINSAMT() 
  418. replace INVOICE->OWNAMT with MOWNAMT() , INVOICE->EXCESS with MEXCESS() , ;
  419. INVOICE->CONTRIB with MCONTRIB() , INVOICE->INSDUE with MINSDUE() 
  420. replace INVOICE->OWNDUE with MOWNDUE() , INVOICE->INVTOTAL with MINVTOTAL() 
  421. replace INVOICE->CUSTTYPE with MCUSTTYP() , INVOICE->OWNINIT with MOWNINIT() 
  422. replace INVOICE->L2TEXT with ML2TEXT() , INVOICE->L3TEXT with ML3TEXT() , ;
  423. INVOICE->L4TEXT with ML4TEXT() 
  424. GO_REC := recno( )
  425. set index to INVNUM 
  426. go GO_REC 
  427.  
  428. //       Partline save goes in here
  429. PINVNO := MINVNO() 
  430. do PARTSAVE with PINVNO 
  431.  
  432. select INVOICE 
  433.  
  434. return iif( MINVNO()  = 0, 0, 2 )
  435.  
  436. //*****************************************************************
  437.  
  438. function INVFIND( OKNEW ) // Amended by SUMMER93
  439. // Calls: GINVNO SINVNO INVFILL INVGET PARTSHOW INVTOT 
  440. // Called By: INVMAIN 
  441. local ISTAT
  442.  
  443. ISTAT := 0 
  444. GETOUT( .f.  )
  445.  
  446. MINVNO( GINVNO( OKNEW ) )
  447.  
  448. if MINVNO() <> 0 
  449.     SINVNO( )
  450.     ISTAT := INVFILL( .t. )
  451.     do INVGET with .f. 
  452.     do PARTSHOW with 15, 1, 10 
  453.     do INVTOT
  454. endif 
  455.  
  456. return ISTAT 
  457.  
  458. //*****************************************************************
  459.  
  460. procedure INVDEL( PINVNO ) // Amended by SUMMER93
  461. // Calls: QBYESNO QBWIPE PARTDEL INVCLEAR QBMESS 
  462. // Called By: INVMAIN 
  463.  
  464. if QBYESNO( "Delete this Invoice?" ) = "Y" 
  465.     select INVOICE 
  466.     set index to INVNUM, INVDATE, INVCUST, INVNAME 
  467.     seek str( PINVNO, 5 )
  468.     if found( )
  469.         do QBWIPE
  470.         do PARTDEL with PINVNO 
  471.         INVCLEAR( )
  472.     endif 
  473.     set index to INVNUM 
  474. else 
  475.     do QBMESS with "Invoice retained", COLFLASH() , 5 
  476. endif 
  477.  
  478. return 
  479.  
  480. //*****************************************************************
  481.  
  482. procedure INVTOTAL( DOPART ) // Amended by SUMMER93
  483. // Calls: 
  484. // Called By: REPREV REPWIP INVTOT 
  485. // These locals cover set/get variables where lvalues are needed
  486. local SUMPART
  487. //   Sum of the parts
  488. //   Sum of specialist
  489. if DOPART 
  490.     select PARTLINE 
  491.     if reccount( )> 0 
  492.         set deleted on 
  493.         SUMPART := SUMPART()
  494.         sum FIELD->TPRICE to SUMPART  // for PARTSPEC="P" .or. PARTSPEC=" "
  495.         SUMPART(SUMPART)
  496.     else 
  497.         
  498.         SUMPART( 0  )
  499.     endif 
  500.     if MINSTOPAY() 
  501.         MINSPART( SUMPART()  )
  502.         
  503.         MOWNPART( 0  )
  504.         MOWNSPEC( 0  )
  505.     else 
  506.         MOWNPART( SUMPART()  )
  507.         
  508.         MINSPART( 0  )
  509.         MINSSPEC( 0  )
  510.     endif 
  511.     select INVOICE 
  512. endif 
  513.  
  514.  
  515. if MINSTOPAY() 
  516.     
  517.     MOWNLAB( 0  )
  518.     MOWNPART( 0  )
  519.     MOWNSPEC( 0  )
  520.     OSUBTOT( 0  )
  521.     OPDSCNT( 0  )
  522.     MOWNAMT( 0  )
  523.     MINSLAB( MLABOURT()  )
  524.     MINSAMT( MINSLAB()  + MINSPART()  + MINSSPEC()  )
  525.     IPDSCNT( MINSPART()  * MPARTDISC()  / 100  )
  526.     ISUBTOT( MINSAMT()  - IPDSCNT()  )
  527.     if MOWNVAT() 
  528.         IVATAMT( 0  )
  529.         OVATAMT( ISUBTOT()  * ( MVATRATE()  / 100 ) )
  530.     else 
  531.         IVATAMT( ISUBTOT()  * ( MVATRATE()  / 100 ) )
  532.         OVATAMT( 0  )
  533.     endif 
  534.     INSSUB( ISUBTOT()  + IVATAMT()  )
  535.     MINSDUE( max( (INSSUB()  - MEXCESS()  - MCONTRIB() ), 0 ) )
  536.     OWNSUB( min( MEXCESS()  + MCONTRIB() , ISUBTOT() ) )
  537.     MOWNDUE( OVATAMT()  + OWNSUB()  )
  538. else 
  539.     
  540.     MINSLAB( 0  )
  541.     MINSPART( 0  )
  542.     MINSSPEC( 0  )
  543.     MCONTRIB( 0  )
  544.     MEXCESS( 0  )
  545.     ISUBTOT( 0  )
  546.     IPDSCNT( 0  )
  547.     MINSDUE( 0  )
  548.     MINSAMT( 0  )
  549.     INSSUB( 0  )
  550.     MOWNLAB( MLABOURT()  )
  551.     MOWNAMT( MOWNLAB()  + MOWNPART()  + MOWNSPEC()  )
  552.     OPDSCNT( MOWNPART()  * MPARTDISC()  / 100  )
  553.     OSUBTOT( MOWNAMT()  - OPDSCNT()  )
  554.     OVATAMT( OSUBTOT()  * ( MVATRATE()  / 100 ) )
  555.     OWNSUB( OSUBTOT()  )
  556.     MOWNDUE( OSUBTOT()  + OVATAMT()  )
  557. endif 
  558.  
  559. return 
  560.  
  561. //*************************************************************
  562.  
  563. procedure INVREN
  564. // Calls: QBCLMESS NEWNUM QBREAD QBYESNO QBMESS 
  565. // Called By: INVEDIT 
  566. //   Renumber an Invoice
  567. local OLDNUM, GO_REC, GETLIST
  568. // These locals cover set/get variables where lvalues are needed
  569. local MINVNO
  570. GETLIST := {}
  571.  
  572. OLDNUM := MINVNO() 
  573. MINVNO( 0  )
  574.  
  575. do QBCLMESS
  576. select INVOICE 
  577.  
  578. @ 2, 0 say "Old Invoice number: " + str( OLDNUM, 5 )
  579. @ 2, 53 say "New invoice number: " 
  580. do while .t. 
  581.     // GET command amended to ...
  582.     MINVNO := MINVNO()
  583.     @ 2, 73  get MINVNO picture "99999"  WHEN { || MINVNO := MINVNO(), .t. } ;
  584.      valid { || MINVNO( MINVNO ) != NIL .and. NEWNUM(.t. ) }
  585.     do QBREAD with "Input NEW Invoice number", "" , GETLIST
  586.     // Call amended
  587.     if GETOUT() 
  588.         MINVNO( OLDNUM  )
  589.         return 
  590.     endif 
  591.     if QBYESNO( "New Number OK?" ) = "Y" 
  592.         exit 
  593.     endif 
  594. enddo 
  595.  
  596. //   renumber the Invoice
  597.  
  598. do QBMESS with "Renumbering Invoice and Parts", COLFLASH() , 0 
  599.  
  600. GO_REC := recno( )
  601. set index to INVNUM, INVDATE, INVCUST, INVNAME 
  602. seek str( OLDNUM, 5 )
  603. if !eof( )
  604.     replace INVOICE->INVNO with MINVNO() 
  605. endif 
  606. set index to INVNUM 
  607. go GO_REC 
  608.  
  609. //    do the  Parts (like delete)
  610. select PARTS 
  611. seek str( OLDNUM, 5 )
  612. do while !eof( )
  613.     replace PARTS->INVNO with MINVNO() 
  614.     seek str( OLDNUM, 5 )
  615. enddo 
  616.  
  617. select PARTLINE 
  618. replace  FIELD->INVNO with MINVNO() all 
  619.  
  620. do QBCLMESS
  621. @ 2, 0 clear to 2, 79 
  622. @ 02, 61 say "Invoice no:" 
  623. @ 2, 73 say MINVNO() picture "99999" 
  624.  
  625. return 
  626.  
  627. //*************************************************************
  628.  
  629. procedure INVNEW( DOIT ) // Amended by SUMMER93
  630. // Calls: NEWNUM 
  631. // Called By: INVADD INVSAVE 
  632.  
  633. select 0 
  634. use QBINFO index QBINFO 
  635. seek "LASTINV" 
  636. if DOIT 
  637.     replace  FIELD->QBTEXT with str( MINVNO() , 5 )
  638. else 
  639.     if found( )
  640.         MINVNO( val( trim(FIELD->QBTEXT )) + 1  )
  641.         do while !NEWNUM( .f. )
  642.             MINVNO( MINVNO()  + 1  )
  643.         enddo 
  644.     else 
  645.         MINVNO( 1000  )
  646.         append blank 
  647.         replace  FIELD->QBINFKEY with "LASTINV" 
  648.     endif 
  649. endif 
  650. use 
  651.  
  652. return 
  653.  
  654. // End of file
  655.